package Presentacion.BaseDeDatos.ABMSubFamilia;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JTextField;

import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.ImageIcon;

import Logica.BaseDeDatos.ABMSubFamiliaLogica;
import Modelo.Marca;

import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.List;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ABMSubFamilia extends JFrame {

	private JPanel contentPane;
	private JTextField tfCodigoSubFamilia;
	private JTextField tfSubFamilia;
	private JTextField tfDescripcion;
	private JButton btnNuevaSubFamilia, btnGrabarYActualizar;
	private JButton btnBuscar;
	private JButton btnIzquierda;
	private JButton btnDerecha;
	private JButton btnUltimo;
	private JButton btnPrimero;
	
	public List<Marca> list;
	private Marca f;
	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ABMSubFamilia frame = new ABMSubFamilia();
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ABMSubFamilia() {
		setResizable(false);
		setTitle("Alta, Baja o Modificaci\u00F3n de Marca");
		this.setVisible(true);

		/**Pregunto si al presionar la "X" esta seguro de que quiere cerrar la ventana.*/
		this.addWindowListener(new WindowAdapter() {
	           public void windowClosing(WindowEvent e) {
	        	   setDefaultCloseOperation(0); 
	        	   cerrarVentana();
	           }
	       });
		
		setBounds(100, 100, 570, 250);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(192, 192, 192));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblSubFamilia = new JLabel("Denominaci\u00F3n de Sub Familia");
		lblSubFamilia.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblSubFamilia.setBounds(10, 11, 267, 27);
		contentPane.add(lblSubFamilia);
		
		tfCodigoSubFamilia = new JTextField();
		tfCodigoSubFamilia.setEditable(false);
		tfCodigoSubFamilia.setBounds(20, 39, 70, 25);
		contentPane.add(tfCodigoSubFamilia);
		tfCodigoSubFamilia.setColumns(10);
		
		tfSubFamilia = new JTextField();
		tfSubFamilia.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfSubFamilia);
			}
			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfSubFamilia);
			}
		});
		tfSubFamilia.setBounds(100, 39, 300, 25);
		tfSubFamilia.setBackground(new Color(153, 255, 153));
		contentPane.add(tfSubFamilia);
		tfSubFamilia.setColumns(10);
		
				
		JLabel lblDescripcion = new JLabel("Descripci\u00F3n");
		lblDescripcion.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblDescripcion.setBounds(10, 75, 105, 27);
		contentPane.add(lblDescripcion);
		
		tfDescripcion = new JTextField();
		tfDescripcion.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfDescripcion);
			}
			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfDescripcion);
			}
		});
		tfDescripcion.setColumns(10);
		tfDescripcion.setBounds(100, 75, 300, 25);
		contentPane.add(tfDescripcion);
		
		btnNuevaSubFamilia = new JButton("<html><p>Nueva</p><p>SubFamilia</p></html>");
		btnNuevaSubFamilia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				nuevo();
			}
		});
		btnNuevaSubFamilia.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnNuevaSubFamilia.setBounds(415, 39, 130, 55);
		contentPane.add(btnNuevaSubFamilia);
		
		btnGrabarYActualizar = new JButton("<html><p>Grabar y</p><p>actualizar</p></html>");
		btnGrabarYActualizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				grabarActualizar();
			}
		});
		btnGrabarYActualizar.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnGrabarYActualizar.setBounds(415, 130, 130, 70);
		contentPane.add(btnGrabarYActualizar);
		
		btnBuscar = new JButton("");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				buscarFamilia();
			}
		});
		btnBuscar.setToolTipText("Buscar");
		btnBuscar.setIcon(new ImageIcon(ABMSubFamilia.class.getResource("/Presentacion/Img/binoculars.png")));
		btnBuscar.setBounds(185, 130, 70, 70);
		contentPane.add(btnBuscar);
		
		btnIzquierda = new JButton("");
		btnIzquierda.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getPre(Integer.parseInt(tfCodigoSubFamilia.getText())).getId());
			}
		});
		btnIzquierda.setToolTipText("Anterior");
		btnIzquierda.setIcon(new ImageIcon(ABMSubFamilia.class.getResource("/Presentacion/Img/izquierda.png")));
		btnIzquierda.setBounds(110, 130, 70, 70);
		contentPane.add(btnIzquierda);
		
		btnDerecha = new JButton("");
		btnDerecha.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getPos(Integer.parseInt(tfCodigoSubFamilia.getText())).getId());
			}
		});
		btnDerecha.setToolTipText("Siguiente");
		btnDerecha.setIcon(new ImageIcon(ABMSubFamilia.class.getResource("/Presentacion/Img/derecha.png")));
		btnDerecha.setBounds(260, 130, 70, 70);
		contentPane.add(btnDerecha);
		
		btnUltimo = new JButton("");
		btnUltimo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getLast().getId());
			}
		});
		btnUltimo.setToolTipText("Ultimo");
		btnUltimo.setIcon(new ImageIcon(ABMSubFamilia.class.getResource("/Presentacion/Img/ultimo.png")));
		btnUltimo.setBounds(335, 130, 70, 70);
		contentPane.add(btnUltimo);
		
		btnPrimero = new JButton("");
		btnPrimero.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				init(-1);
			}
		});
		btnPrimero.setToolTipText("Principio");
		btnPrimero.setIcon(new ImageIcon(ABMSubFamilia.class.getResource("/Presentacion/Img/primero.png")));
		btnPrimero.setBounds(35, 130, 70, 70);
		contentPane.add(btnPrimero);
		
		this.init(-1);
	}
	
	/*Metodo para confirma si esta seguro que quiere cerrar la aplicacinn*/	
	public void cerrarVentana(){
		this.setVisible(false);					
	}
	
	/** Pinto JTEXTFIELD de color */
	public void pintaVerde(JTextField tf){
		tf.setBackground(new Color(153, 255, 153));
	}
	
	public void pintaBlanco(JTextField tf){
		tf.setBackground(new Color(255, 255, 255));
	}
	
	
	public void init(int id){
		list = ABMSubFamiliaLogica.getList();
		Marca o;
		
		if(id != -1)
			o = ABMSubFamiliaLogica.getById(id);
		else
			o = list.get(0);
		
		tfCodigoSubFamilia.setText(Integer.toString(o.getId()));
		tfSubFamilia.setText(o.getNombre());
		tfDescripcion.setText(o.getDesc());
	}
	
	public Marca getPos(int id){
		return ABMSubFamiliaLogica.getPos(id);
	}	
	public Marca getPre(int id){
		return ABMSubFamiliaLogica.getPre(id);
	}
	public Marca getLast(){
		return ABMSubFamiliaLogica.getLast();
	}
	
	public void buscarFamilia(){
		new BuscarSubFamilia(this);
	}
	
	public void nuevo(){
		try {
			Marca last = ABMSubFamiliaLogica.getLast();
			Marca obj;
			
			tfCodigoSubFamilia.setText(Integer.toString(last.getId() +1));
			tfSubFamilia.setText("");
			
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
	
	
	public void grabarActualizar(){
		try {
			if(tfSubFamilia.getText().length() == 0)
				throw new Exception();
			int id = ABMSubFamiliaLogica.getById(Integer.parseInt(tfCodigoSubFamilia.getText())).getId();
			int count = ABMSubFamiliaLogica.countByNom(tfSubFamilia.getText());
			Marca f = null;
			if (id == 0 && count == 0 ) //nuevo
				crear();
			
			if(id == 0 && count == 1)
				JOptionPane.showMessageDialog(null, "No se pudo crear la marca \n ERROR: Objeto existente",
						  "Error", JOptionPane.ERROR_MESSAGE);
			
			if(id != 0 && count == 1){
				f = ABMSubFamiliaLogica.getByNom(tfSubFamilia.getText());
				if (id == f.getId())
					modificar();
				else
					JOptionPane.showMessageDialog(null, "No se pudo crear la marca \n ERROR: Objeto existente",
							  "Error", JOptionPane.ERROR_MESSAGE);
			}
				
			if(id != 0 && count == 0)
				modificar();
		
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		list = ABMSubFamiliaLogica.getList();
	}
	
	public void crear(){
		Marca obj;
		obj = ABMSubFamiliaLogica.getByNom(tfSubFamilia.getText());
		obj.setId(Integer.parseInt(tfCodigoSubFamilia.getText()));
		obj.setNombre(tfSubFamilia.getText().toUpperCase());
		obj.setDesc(tfDescripcion.getText().toUpperCase());
		
		ABMSubFamiliaLogica.crear(obj);
	}
	
	public void modificar(){
		Marca obj;
		obj = ABMSubFamiliaLogica.getByNom(tfSubFamilia.getText());
		obj.setId(Integer.parseInt(tfCodigoSubFamilia.getText()));
		obj.setNombre(tfSubFamilia.getText().toUpperCase());
		obj.setDesc(tfDescripcion.getText().toUpperCase());
		
		ABMSubFamiliaLogica.modificar(Integer.parseInt(tfCodigoSubFamilia.getText()), obj);
	}
}
